﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace UI.Common
{
    public partial class MainPage : UserControl
    {
        UIElement exInnerLink;

        public MainPage()
        {
            InitializeComponent();
        }

        // After the Frame navigates, ensure the HyperlinkButton representing the current page is selected
        private void ContentFrame_Navigated(object sender, NavigationEventArgs e)
        {
            //foreach (UIElement child in LinksStackPanel.Children)
            //{
            //    HyperlinkButton hb = child as HyperlinkButton;
            //    if (hb != null && hb.NavigateUri != null)
            //    {
            //        if (hb.NavigateUri.ToString().Equals(e.Uri.ToString()))
            //        {
            //            VisualStateManager.GoToState(hb, "ActiveLink", true);
            //        }
            //        else
            //        {
            //            VisualStateManager.GoToState(hb, "InactiveLink", true);
            //        }
            //    }
            //}
        }

        // If an error occurs during navigation, show an error window
        private void ContentFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
        {
            e.Handled = true;
            ChildWindow errorWin = new ErrorWindow(e.Uri);
            errorWin.Show();
        }


        private void lnkOrganizator_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            
            Views.InnerLinkViews.OrganizatorLinks ol = new Views.InnerLinkViews.OrganizatorLinks();
            ShowInnerLinks(ol);

            NavigateToPage(ContentFrame, "Organizator");

        }

        private void ShowInnerLinks(UIElement element)
        {            
            if (InnerLinkCanvas.Children.Count > 1) return;

            if (InnerLinkCanvas.Children.Count > 0)
            {
                exInnerLink = InnerLinkCanvas.Children[0];
                ViewLinksDoubleAnimation(0, -300, exInnerLink);
            }

            InnerLinkCanvas.Children.Add(element);
            element.SetValue(Canvas.LeftProperty, 500.0);
            ViewLinksDoubleAnimation(0,0, element);
        }

        private void ViewLinksDoubleAnimation(double baslangicNoktasi, double bitisNoktası, UIElement element)
        {
            //Defines the X-axis animation 
            DoubleAnimation animationX = new DoubleAnimation();
            animationX.To = bitisNoktası;
            animationX.Duration = new Duration(TimeSpan.FromMilliseconds(500));
            animationX.EasingFunction = new ExponentialEase();

            Storyboard.SetTarget(animationX, element);
            Storyboard.SetTargetProperty(animationX, new PropertyPath("(Canvas.Left)"));
            Storyboard storyboard = new Storyboard();

            storyboard.Children.Add(animationX);
            storyboard.Completed += new EventHandler(storyboard_Completed);
            storyboard.Begin();
        }

        void storyboard_Completed(object sender, EventArgs e)
        {
            if (exInnerLink != null)
            {
                InnerLinkCanvas.Children.Remove(exInnerLink);
                exInnerLink = null;
                GC.Collect();
            }
        }


        private void TextBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Views.InnerLinkViews.MyPageLinks mpl = new Views.InnerLinkViews.MyPageLinks();
            ShowInnerLinks(mpl);
        }

        private void eOrganizatorLogo1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            NavigateToPage(ContentFrame, "/Home");
        }


        public void NavigateToPage( Frame contentFrame, string content )
        {
            contentFrame.Navigate(new Uri(content, UriKind.Relative));
        }
    }
}